package modelo.AlgoHero;

import java.util.ArrayList;
import java.util.Iterator;
import Titiritero.titiritero.ObjetoVivo;
import modelo.Excepciones.ObjetoSinMasElementosExcepcion;


public class ConjuntoElementosReproducibles implements ObjetoVivo {
	
	private ArrayList <ElementoReproducible> lista;
	private Iterator <ElementoReproducible> iterador =null;
	
	public ConjuntoElementosReproducibles() {
		
		this.lista = new ArrayList <ElementoReproducible> ();
				
	}
	
	public void add(ElementoReproducible e){
		
		if (!this.lista.isEmpty()) {
			for (int i = 0 ; i<lista.size(); i++){
				e.incrementarX();				
			}
		}
	
		this.lista.add(e);
	}
	
	public ElementoReproducible next() throws ObjetoSinMasElementosExcepcion{
		
		if (this.iterador == null) {this.iterador = this.lista.iterator();}
		
		if (this.iterador.hasNext()){
		return this.iterador.next();
		}
		
		throw new ObjetoSinMasElementosExcepcion(); 
		
	}
	
	public Boolean hasNext(){
		
		if (this.iterador == null) {this.iterador = this.lista.iterator();}
		
		return this.iterador.hasNext();
	}
	
	public Boolean compareTo( ConjuntoElementosReproducibles conjunto){
		
		while (this.hasNext()){
			
			if (!conjunto.hasNext()) return false;
			
			try {
				return (this.next().compareTo(conjunto.next()));
			} catch (ObjetoSinMasElementosExcepcion e) {
				e.printStackTrace();
			}
			
		}
		
		if (conjunto.hasNext()) return false;
				
		return true;
	}

	/* (non-Javadoc)
	 * @see Titiritero.titiritero.ObjetoVivo#vivir()
	 */
	@Override
	public void vivir() {
		
		Iterator <ElementoReproducible> iteradorAux = this.lista.iterator();
		
		while (iteradorAux.hasNext()){
			
			iteradorAux.next().vivir();
			
		}
		
	}
	
	public void reiniciarRecorrido(){
		
		this.iterador = this.lista.iterator();
		
	}

}
